/*****************************************************************//**
 * \file   SimdroidMeshDef.h
 * \brief  SimdroidMeshDef
 *
 * \author Wyatt
 * \date   May 2023
 *********************************************************************/
#pragma once

#include <string.h>
#include <memory>

namespace SimElem
{
	static std::string optToStr[] = {"","R","I","M","H","D","T","E","P"};

	enum Opt	//  ...
	{
		Opt_None = 0x00,
		R         = 0x01, // reduced-integration
		I         = 0x02, // incompatible mode quad/bricks or improved surface stress formuation tets
		M         = 0x04, // modified
		H         = 0x08, // hybrid
		D         = 0x10, // dispersion control
		T         = 0x11, // coupled temperature-displacement
		E         = 0x12, // piezoelectric
		P         = 0x14, // pore pressure
	};
	enum Type {
		E_UNKNOWN = 0,
		E_001,
		E_102,
		E_103,
		E_203,
		E_204,
		E_206,
		E_208,
		E_209,
		E_304,
		E_305,
		E_306,
		E_308,
		E_310,
		E_312,
		E_313,
		E_315,
		E_318,
		E_320,
		E_324,
		E_327
	};
	static int _gTypeIndex[] = {
		0,
		001,
		102,
		103,
		203,
		204,
		206,
		208,
		209,
		304,
		305,
		306,
		308,
		310,
		312,
		313,
		315,
		318,
		320,
		324,
		327
	};
	static std::string _gTypesTRIndex[] = {
	"UNKOWN",
	"Point",
	"Line2",
	"Line3",
	"Tri3",
	//"Quad4",
	"Shell4"
	"Tri6",
	"Quad8",
	"UNKNOWN",
	"Tet4",
	"Pyramid5",
	"Wedge6",
	"Hex8",
	"Tet10",
	"UNKNOWN",
	"Pyramid13",
	"Wedge15",
	"UNKNOWN",
	"Hex20",
	"UNKNOWN",
	"UNKNOWN"
	};
	static Type _gTypeSimple[] = {
		E_UNKNOWN,
		E_001,
		E_102,
		E_102,
		E_203,
		E_204,
		E_203,
		E_204,
		E_203,
		E_304,
		E_305,
		E_306,
		E_308,
		E_304,
		E_306,
		E_305,
		E_306,
		E_306,
		E_308,
		E_308,
		E_308
	};

};

#define SimElemNdCnt(etype) ((etype) % 100)
